﻿# 使用官方的.NET 8 SDK镜像作为构建环境
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app

# 复制解决方案文件
COPY *.sln ./

# 复制所有项目文件（包括缺失的项目）
COPY CoreManager.API/*.csproj ./CoreManager.API/
COPY CoreManager.Core/*.csproj ./CoreManager.Core/
COPY CoreManager.Repository/*.csproj ./CoreManager.Repository/
COPY CoreManager.Models/*.csproj ./CoreManager.Models/
COPY CoreManager.Services/*.csproj ./CoreManager.Services/
COPY CoreManager.Common/*.csproj ./CoreManager.Common/
COPY CoreManager.Biz/*.csproj ./CoreManager.Biz/
COPY CoreManager.Tasks/*.csproj ./CoreManager.Tasks/
COPY CoreManager.UnitTesting/*.csproj ./CoreManager.UnitTesting/
COPY CoreManager.Data/*.csproj ./CoreManager.Data/

# 还原NuGet包
RUN dotnet restore

# 复制所有源代码
COPY . ./

# 构建并发布应用
RUN dotnet publish CoreManager.API -c Release -o out --no-restore

# 使用官方的ASP.NET Core运行时镜像
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app

# 安装必要的系统依赖和中文字体
RUN apt-get update && apt-get install -y \
    locales \
    tzdata \
    fonts-wqy-zenhei \
    fonts-wqy-microhei \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean

# 设置时区为上海
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 设置中文环境变量
RUN sed -i '/zh_CN.UTF-8/s/^# //g' /etc/locale.gen && locale-gen
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8

# 设置ASP.NET Core环境变量
ENV ASPNETCORE_ENVIRONMENT=Production
ENV ASPNETCORE_URLS=http://+:80

# 创建非root用户
RUN groupadd -r coremanager && useradd -r -g coremanager coremanager

# 创建应用目录和日志目录
RUN mkdir -p /app/logs && \
    mkdir -p /app/wwwroot && \
    chown -R coremanager:coremanager /app

# 复制构建输出
COPY --from=build-env /app/out .

# 切换到非root用户
USER coremanager

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
  CMD curl -f http://localhost:80/health || exit 1

# 暴露端口
EXPOSE 80

# 启动应用
ENTRYPOINT ["dotnet", "CoreManager.API.dll"]